package day18;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.List;
import java.util.Map;
import java.util.Set;

public class Demo03 {
	public static void main(String[] args) {
		test05();
	}

	private static void test05() {
		// Map集合存储User对象

		User u1 = new User(1L, "alice", "123456");
		User u2 = new User(2L, "alice", "123456");
		User u3 = new User(3L, "alice", "123456");

		Map<Long, User> map = new HashMap<Long, User>();
		map.put(u1.getId(), u1);
		map.put(u2.getId(), u2);
		map.put(u3.getId(), u3);

		// selectById: 2
		User u = map.get(2L);

	}

	private static void test04() {
		// Collection集合存储User对象
		List<User> users = new ArrayList<User>();
		User u1 = new User(1L, "alice", "123456");
		User u2 = new User(2L, "alice", "123456");
		User u3 = new User(3L, "alice", "123456");
		users.add(u1);
		users.add(u2);
		users.add(u3);
	}

	private static void test03() {
		// Map集合的遍历
		Map<Integer, String> map = new HashMap<Integer, String>();
		map.put(1, "aaa");
		map.put(2, "bbb");
		map.put(3, "ccc");
		map.put(4, "ddd");
		System.out.println(map);

		// 通过Map集合的keySet遍历
		//		Set<Integer> keys = map.keySet();
		//		for (Integer k : keys) {
		//			System.out.println(k + ": " + map.get(k));
		//		}

		// 通过Map集合的values遍历
		// 该方式无法获取键
		//		Collection<String> values = map.values();
		//		for (String v : values) {
		//			System.out.println(v);
		//		}

		// 通过entrySet遍历
		// Map的泛型是什么, Entry的泛型就是什么
		Set<Map.Entry<Integer, String>> entries = map.entrySet();
		//		for (Map.Entry<Integer, String> entry : entries) {
		//			System.out.println(entry.getKey() + ": " + entry.getValue());
		//		}
		// entrySet只能用来遍历Map集合, 最多在遍历过程中修改某个key对应的value
		// 无法向Map中添加键值对

	}

	private static void test02() {
		Map<Integer, String> map = new HashMap<Integer, String>();
		map.put(1, "aaa");
		map.put(2, "bbb");
		map.put(3, "ccc");
		map.put(4, "ddd");

		System.out.println(map.size());
		System.out.println(map);

		// 向Map集合中存入键值对时
		// 如果键已存在, 会用新的值覆盖旧的值
		map.put(2, "AAA");
		System.out.println(map);

		// 获取指定key对应的值
		String val = map.get(3);
		System.out.println(val);

		// 判断Map集合中是否包含指定键
		System.out.println(map.containsKey(5));
		// 判断Map集合中是否包含指定值
		System.out.println(map.containsValue("ccc"));
	}

	private static void test01() {
		Map<Integer, String> map = new Hashtable<Integer, String>();
		// java.lang.NullPointerException
		// Hashtable的键或值为null时, 会引发空指针异常
		// map.put(null, "aaa");
		// map.put(1, null);

		Map<Integer, String> map2 = new HashMap<Integer, String>();
		// HashMap的键或值可以为null
		map2.put(null, "aaa");
		map2.put(1, null);
		System.out.println(map2.size());

	}
}
